package zhengqc.list;

public abstract class AbstractList<E> implements List<E> {
    /* 列表的元素数量 */
    protected int size;
    /* 下标检查 */
    protected void rangeCheck(int index) {
        if (index < 0 || index >= this.size) {
            throw new IndexOutOfBoundsException(String.format("Index: %d, Size: %d", index, this.size));
        }
    }
    /* 添加元素时下标检查 */
    protected void rangeCheckForAdd(int index) {
        if (index < 0 || index > size) {
            throw new IndexOutOfBoundsException(String.format("Index: %d, Size: %d", index, this.size));
        }
    }
    @Override /* 获取列表元素数量 */
    public int getSize() {
        return this.size;
    }
    @Override /* 列表是否为空 */
    public boolean isEmpty() {
        return this.size == 0;
    }
    @Override /* 列表中是否含有指定的元素 */
    public boolean contains(E element) {
        return this.indexOf(element) != ELEMENT_NOT_FOUND;
    }
    @Override /* 设置列表开始位置的元素 */
    public void setFirst(E element) {
        set(0, element);
    }
    @Override /* 设置列表末尾位置的元素 */
    public void setLast(E element) {
        set(this.size-1, element);
    }
    @Override /* 获取列表开始位置的元素 */
    public E getFirst() {
        return get(0);
    }
    @Override /* 获取列表末尾位置的元素 */
    public E getLast() {
        return get(this.size-1);
    }
}
